﻿using System;
using System.Collections.Generic;
using System.Linq;
using FTools.Dominio;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
using System.Text;
using FTools.Generico;

namespace FTools.Persistencia
{
    class PerCiudad
    {
        static string msg = "";

        //OBTENER CIUDAD
        public Ciudad obtenerCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, long xIdCiudad)
        {
            Ciudad objCiudad = new Ciudad();
            DataTable dataTable = new DataTable();
            PerDepartamento objPerDepartamento = new PerDepartamento();
            try
            {
                SqlCommand command = new SqlCommand("select * from CIUDAD where ID_CIUDAD=@IdCiudad");

                command.Parameters.AddWithValue("@IdCiudad", xIdCiudad);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                if (dataTable.Rows.Count >= 0)
                {
                    DataRow fila = dataTable.Rows[0];
                    Departamento objDepartamento = objPerDepartamento.obtenerDepartamento(xConexion, xTransaccion, (long)fila.ItemArray[2]);

                    objCiudad.IdCiudad = (long)fila.ItemArray[0];
                    objCiudad.Nombre = (String)fila.ItemArray[1]; objCiudad.Nombre = objCiudad.Nombre.Trim();
                    objCiudad.ObjDepartamento = objDepartamento;
                }
                return objCiudad;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //EXISTE CIUDAD
        public Boolean existeCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, long xIdCiudad)
        {
            DataTable dataTable = new DataTable();
            try
            {
                SqlCommand command = new SqlCommand("select count(*) as EXISTE from CIUDAD where ID_CIUDAD=@IdCiudad");

                command.Parameters.AddWithValue("@IdCiudad", xIdCiudad);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                if (dataTable.Rows.Count >= 0)
                {
                    DataRow fila = dataTable.Rows[0];
                    if ((int)fila.ItemArray[0] > 0)
                    {
                        return true;
                    }
                }
                return false;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //EXISTE CIUDAD
        public Boolean existeCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, String xNombre, long xIdDepartamento)
        {
            DataTable dataTable = new DataTable();
            try
            {
                SqlCommand command = new SqlCommand("select count(*) as EXISTE from CIUDAD where NOMBRE=@Nombre and ID_DEPARTAMENTO=@IdDepartamento");

                command.Parameters.AddWithValue("@Nombre", xNombre.Trim());
                command.Parameters.AddWithValue("@IdDepartamento", xIdDepartamento);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                if (dataTable.Rows.Count >= 0)
                {
                    DataRow fila = dataTable.Rows[0];
                    if ((int)fila.ItemArray[0] > 0)
                    {
                        return true;
                    }
                }
                return false;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //OBTENER COLECCION CIUDAD (POR DEPARTAMENTO)
        public ArrayList obtenerColeccionCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, long xIdDepartamento)
        {
            SqlDataAdapter dataAdapter;
            DataTable dataTable = new DataTable();
            ArrayList colCiudad = new ArrayList();
            PerDepartamento objPerDepartamento = new PerDepartamento();
            try
            {
                SqlCommand command = new SqlCommand("select * from CIUDAD where ID_DEPARTAMENTO=@IdDepartamento");
                command.Parameters.AddWithValue("@IdDepartamento", xIdDepartamento);

                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                dataAdapter = new SqlDataAdapter(command);
                dataAdapter.Fill(dataTable);
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    Ciudad objCiudad = new Ciudad();
                    DataRow fila = dataTable.Rows[i];
                    Departamento objDepartamento = objPerDepartamento.obtenerDepartamento(xConexion, xTransaccion, (long)fila.ItemArray[2]);

                    objCiudad.IdCiudad = (long)fila.ItemArray[0];
                    objCiudad.Nombre = (String)fila.ItemArray[1]; objCiudad.Nombre = objCiudad.Nombre.Trim();
                    objCiudad.ObjDepartamento = objDepartamento;
                    colCiudad.Add(objCiudad);
                }
                return colCiudad;
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //ALTA CIUDAD
        public int altaCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, Ciudad xObjCiudad)
        {
            try
            {
                SqlCommand command = new SqlCommand("insert into CIUDAD values (@IdCiudad, @Nombre, @IdDepartamento)");

                command.Parameters.AddWithValue("@IdCiudad", xObjCiudad.IdCiudad);
                command.Parameters.AddWithValue("@Nombre", xObjCiudad.Nombre.Trim());
                command.Parameters.AddWithValue("@IdDepartamento", xObjCiudad.ObjDepartamento.IdDepartamento);

                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                return command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //BAJA CIUDAD
        public int bajaCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, Ciudad xObjCiudad)
        {
            try
            {
                SqlCommand command = new SqlCommand("delete from CIUDAD where ID_CIUDAD=@IdCiudad");

                command.Parameters.AddWithValue("@IdCiudad", xObjCiudad.IdCiudad);
                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                return command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }

        //MODIFICA CIUDAD
        public int modificaCiudad(SqlConnection xConexion, SqlTransaction xTransaccion, Ciudad xObjCiudad)
        {
            try
            {
                SqlCommand command = new SqlCommand("update CIUDAD set NOMBRE=@Nombre, ID_DEPARTAMENTO=@IdDepartamento " +
                                                    "where ID_CIUDAD = @IdCiudad");

                command.Parameters.AddWithValue("@IdCiudad", xObjCiudad.IdCiudad);
                command.Parameters.AddWithValue("@Nombre", xObjCiudad.Nombre.Trim());
                command.Parameters.AddWithValue("@IdPais", xObjCiudad.ObjDepartamento.IdDepartamento);

                command.Connection = xConexion;
                command.Transaction = xTransaccion;
                return command.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + " Message: " + ex.Errors[i].Message + "\n";
                }
                System.Console.WriteLine(msg);
                throw new Exception("#Persistencia# " + ex.Message);
            }
        }
    }
}
